package com.example.designpattern.behavioral.state;

public class User implements IUser, ISwitchState {
    private State state = State.NORMAL;

    /**
     * 用户类实现了 IUser 接口，IUser 接口中的每个功能都需要判断用户是否为 Plus 会员，也就是说每个方法中都有if (state == State.PLUS) {} else {}语句，如果状态不止两种，还需要用上 switch-case 语句来判断状态，这就是不使用状态模式的弊端：
     * <p>
     * 判断用户状态会产生大量的分支判断语句，导致代码冗长；
     * 当状态有增加或减少时，需要改动多个地方，违反开闭原则。
     */
    @Override
    public void mockInterview() {
        if (state == State.PLUS) {
            System.out.println("开始模拟面试");
        } else {
            System.out.println("模拟面试是 Plus 会员专享功能");
        }
    }

    @Override
    public void purchasePlus() {
        state = State.PLUS;
    }

    @Override
    public void expire() {
        state = State.NORMAL;
    }
}

